Aller au contenu

10 Cours Systèmes

Histoire et rôle des systèmes d'exploitation⚓︎

Généralités⚓︎

Nous avons vu qu’un ordinateur a été conçu pour exécuter des algorithmes sous forme de programmes.

Le système d’exploitation est un programme tout à fait singulier, il est chargé en mémoire vive dès le démarrage de l’ordinateur et y reste jusqu’à son extinction. Il a la charge de coordonner l’ensemble des tâches qui sont exécutées par l’ordinateur, mais aussi de piloter les différents composants (disque dur, écran, processeur, mémoire etc...) de l’appareil informatique.

Il fait le lien (interface) entre le matériel et les applications.

Le système d’exploitation a les responsabilités suivantes :

  • Gérer le lancement des diverses applications et donner l’illusion que l’ordinateur est multitâche.
  • Identifier les utilisateurs.
  • Gérer l’organisation du disque dur et de ses fichiers.
  • Contrôler l’accès aux données du disque dur et ressources de l’ordinateur.

Les deux familles de systèmes d’exploitation les plus populaires sont :

  • UNIX (dont macOS, GNU/Linux, iOS et Android)
  • Windows

Remarque : on utilise communément la terminologie OS (Opérating System) pour désigner un système d’exploitation.

Libre / propriétaire...⚓︎

Le système UNIX est un système dit "propriétaire" (certaines personnes disent "privateur"), c'est-à-dire un système non libre. Mais plus généralement, qu'est-ce qu'un logiciel libre ?

D'après Wikipédia : "Un logiciel libre est un logiciel dont l'utilisation, l'étude, la modification et la duplication par autrui en vue de sa diffusion sont permises, techniquement et légalement, ceci afin de garantir certaines libertés induites, dont le contrôle du programme par l'utilisateur et la possibilité de partage entre individus". Le système UNIX ne respecte pas ces droits (par exemple le code source d'UNIX n'est pas disponible, l'étude d'UNIX est donc impossible), UNIX est donc un système "propriétaire" (le contraire de "libre"). Attention qui dit logiciel libre ne veut pas forcement dire logiciel gratuit (même si c'est souvent le cas), la confusion entre "libre" et "gratuit" vient de l'anglais puisque "free" veut à la fois dire "libre", mais aussi gratuit.

Histoire⚓︎

Voici une courte vidéo de l’institut Mines-Telecom présentant l’histoire des systèmes d’exploitation.

Voici une courte vidéo de l’institut Mines-Telecom retracant l'histoire d'UNIX.

Histoire de Windows⚓︎

Microsoft a été créé par Bill Gates et Paul Allen en 1975. Microsoft est surtout connu pour son système d'exploitation Windows. Windows est un système d'exploitation "propriétaire", la première version de Windows date de 1983, mais à cette date, Windows n'est qu'un ajout sur un autre système d'exploitation nommé MS-DOS. Aujourd'hui Windows reste le système d'exploitation le plus utilisé au monde sur les ordinateurs grand public, il faut dire que l'achat de Windows est quasiment imposé lorsque l'on achète un ordinateur dans le commerce, car oui, quand vous achetez un ordinateur neuf, une partie de la somme que vous versez termine dans les poches de Microsoft : Windows est pré-installé sur de nombreux ordinateurs. Cela s'appelle de la vente liée. Il est possible de se faire rembourser la licence Windows, mais cette opération est relativement complexe, et il faut alors réinstaller soi-même un autre système d'exploitation sur son ordinateur.

Histoire de GNU/Linux⚓︎

En 1991, l’étudiant finlandais Linus Torvalds qui a alors 22 ans, recherchait un moyen d’avoir un système UNIX sur sa machine INTEL. Comme il n’en trouvait pas à sa guise, il décida de commencer le développement d’un noyau de système d’exploitation alternatif à UNIX.

Après quelques mois, Il diffusa le code de son travail via un compte FTP de l’Université d’Helsinki.
Pour la petite anecdote, le dossier contenant ces travaux a été nommé « Linux » par un administrateur du serveur FTP : Linux pour « Linus UNIX ». Par la suite, ce nom restera.

Au même moment, Richard Stallman, un « hacker » (programmeur) réputé du MIT, montait en parallèle un projet nommé « GNU » (Gnu Is Not Unix) dont le but était de créer un système d’exploitation libre et gratuit de type UNIX, à partir des contributions bénévoles de programmeurs.

En résumé, Linus Torvalds avait le noyau mais pas les logiciels, et Richard Stallman avait les logiciels mais pas le noyau : la mise en commun logique qui suivit aboutit à la naissance du nouveau système d’exploitation GNU/Linux, abusivement abrégé en Linux dans la littérature courante, au grand désespoir de Richard Stallman qui se sent parfois un peu oublié dans l’histoire, alors que sa très large contribution au succès de l’entreprise n’est plus à démontrer !

Linux est beaucoup plus présent dans le monde des serveurs que sur les postes de travail. Le noyau Linux équipe la plupart des systèmes embarqués (box, robots, aérospatial, drones...). mais aussi les supercalculateurs Linux domine le marché des smartphones via l’OS Android qui s’appuie sur un noyau Linux.

La vidéo ci-dessous raconte l'histoire de Linux en entrant un peu plus dans les détails :

https://www.youtube.com/watch?v=IquNF_DXcF8&feature=emb_logo

MacOS⚓︎

Enfin pour terminer, quelques mots sur le système d'exploitation des ordinateurs de marque Apple : tous les ordinateurs d'Apple sont livrés avec le système d'exploitation macOS. Ce système macOS est un système d'exploitation UNIX, c'est donc un système d'exploitation propriétaire.

Le Shell, une IHM pour les systèmes d’exploitation⚓︎

Une interface entre l’utilisateur et le système d’exploitation s’appelle un shell ou interpréteur de commandes.

Le rôle d’un shell est de prendre une entrée de l’utilisateur, de la traduire en instructions compréhensibles par le système d’exploitation et de renvoyer la réponse du système à l’utilisateur.

Il existe deux grandes catégories de shell :

  • les interfaces textuelles comme BASH, le plus commun sur les systèmes de la famille UNIX.
  • les interfaces graphiques qu’on retrouve dans les systèmes d’exploitation grand public tels que Windows.

Pour résumer, une façon d’interagir avec le système est d’utiliser un terminal (ou console) dans lequel vous pourrez saisir des commandes (qui ne sont rien d’autre que des programmes). Le programme avec lequel vous interagissez pour exécuter les commandes s’appelle le shell.

GNU/Linux⚓︎

L'arborescence de GNU/Linux⚓︎

Système de fichiers racine⚓︎

L’arborescence d’un système GNU/Linux se présente sous la forme suivante :

Figure 1 : Arborescence des dossiers sous Linux

Remarques :

  • Sous GNU/Linux, les fichiers cachés commencent par un point.
  • Sous GNU/Linux, un fichier ne possède pas forcement une extension.

Bien entendu, les dossiers représentés peuvent contenir d’autres dossiers et des fichiers.

Voici une brève description de quelques dossiers du système:

Le système de fichiers racine (root file system), soit le système de fichiers primaire est associé au répertoire le plus haut / :

  • /bin : commandes binaires utilisateur essentielles (pour tous les utilisateurs)
  • /boot : fichiers statiques du chargeur de lancement
  • /dev : fichiers de périphériques
  • /etc : configuration système spécifique à la machine
  • /home : répertoires personnels des utilisateurs
  • /lib : bibliothèques partagées essentielles et modules du noyau
  • /mnt : point de montage pour les systèmes de fichiers montés temporairement
  • /proc : système de fichiers virtuel d’information du noyau et des processus /root répertoire personnel de root (optionnel)
  • /sbin : binaires système (binaires auparavant mis dans /etc)
  • /sys : état des périphériques (model device) et sous-systèmes (subsystems)
  • /tmp : fichiers temporaires

Remarques :

  • sous Linux, les chemins sont séparés par des slashes / : /etc/init/xfs mais jamais des anti-slashes \ (spécifique à Windows).
  • ./ représente le répertoire courant.
  • ../ représente le répertoire parent.
  • ~/ (tilde) représente le répertoire personnel de l’utilisateur (home/nom_utilisateur).

Chemin absolu ou relatif⚓︎

Ci-dessous, un exemple plus développé de l’arborescence d’un disque sous GNU/Linux :

Figure 2 : Arborescence développée

On y voit les dossiers personnels de deux utilisateurs : jcg et elie.

Pour indiquer la position d’un fichier (ou d’un répertoire) dans l’arborescence, il existe 2 méthodes : indiquer un chemin absolu ou indiquer un chemin relatif :

  • Le chemin absolu doit indiquer « le chemin » depuis la racine / et on indique tous les répertoires rencontrés.
  • Le chemin relatif part du répertoire courant. Il ne part donc pas forcément de la racine, mais depuis un répertoire quelconque.

En considérant l’exemple d’arborescence ci-dessus :

  • Le chemin absolu du fichier tutu.txt sera :

    • /home/elie/documents/tutu.txt
  • Le chemin relatif permettant d’accéder au fichier toto.txt depuis le répertoire jcg est :

    • photo/famille/toto.txt
  • le chemin relatif pour accéder au fichier tata.txt depuis le répertoire famille est :

    • ../vacances/tata.txt (remarque : ../ permet de remonter du dossier parent photos)

Remarque : L’absence ou la présence du / au début du chemin nous permettra de distinguer un chemin relatif d’un chemin absolu.

Exercice :⚓︎

  1. En vous basant sur l’arborescence ci-dessus, déterminez le chemin absolu permettant d’accéder au fichier :

    • networks
    • titi.txt
  2. Toujours en vous basant sur l’arborescence ci-dessus, déterminez le chemin relatif permettant d’accéder au fichier :

    • titi.txt depuis le répertoire elie
    • tutu.txt depuis le répertoire boulot

Bash, le shell Linux en lignes de commandes⚓︎

BASH est un shell, un interpréteur de lignes de commandes pouvant accéder aux services et interagir avec le noyau d’un système d’exploitation. Bash est le shell de base utilisé dans le terminal d’une distribution Linux.

Remarque : les commandes Linux et UNIX sont à peu près les mêmes, il y a quelques différences, qui n'interviennent pas sur les commandes les plus courantes que vous verrez en Première.

L'invite de commande⚓︎

À l’ouverture d’un terminal, on peut voir l’invite de commande sous la forme suivante :

nom_utilisateur@nom_ordinateur:~$

La syntaxe d’une commande Bash est simple. Il suffit de saisir le nom de la commande à la suite de cette invite.

Par exemple :

nom_utilisateur@nom_ordinateur:~$ ls

La commande ls permet en effet de lister le contenu d’un dossier.

Remarque : le nom de la commande peut être suivi d’options facultatives, introduites par un tiret, et d’arguments :

  • nom_commande -option1 -option2 argument1 argument2

Par exemple, la commande ci-dessous demande d’utiliser la commande ls pour afficher les informations détaillées (option -l) sur le fichier exemple:

naruto@MonOrdiAMoi:~$ ls -l exemple

On obtient :

-rw-rw-r-- 1 naruto naruto 0 août 16 12:05 exemple

Remarque : chaque commande est un programme enregistré dans un fichier. Par exemple, la commande ls se réfère à un programme situé à l’emplacement /usr/bin/ls

Les commandes linux⚓︎

Quasiment tout ce qu'il faut savoir se trouve ici :

http://juliend.github.io/linux-cheatsheet

Pour nous, simplement lire les commandes entourées...

Voir aussi : https://riptutorial.com/fr/linux/example/25726/options-pour-la-commande-ls

Ou pour les plus curieux : https://fr.wikipedia.org/wiki/Commandes_Unix

Que faut-il retenir ?⚓︎

Il faut connaître les commandes Bash de base :

  • cd pour naviguer d'un dossier à l'autre (ou parfois chdir, abréviation de l'anglais change directory)
  • ls pour lister le contenu d'un dossier (abréviation de list en anglais)
  • cat pour lire le contenu d'un fichier
  • touch pour créer un nouveau fichier
  • mkdir pour créer un nouveau dossier (mkdir est l'abréviation de make directory, « créer répertoire »)
  • sudo pour obtenir les droits de super-utilisateur
  • man pour connaître le manuel d'utilisation d 'une commande.
  • rm pour effacer un fichier ou rmdir pour un dossier (en référence au terme anglais remove, « supprimer »).
  • cp pour copier un fichier ou dossier (en référence au terme anglais copy, copier).
  • mv pour déplacer un fichier (en référence au terme anglais move, déplacer). Il permet également de renommer un fichier ou un répertoire.
  • pwd pour connaître le chemin courant (Son nom signifie en anglais « print working directory »).
  • find pour trouver un fichier par son nom.
  • grep pour trouver une chaîne de caractère dans un fichier.
  • chmod (abréviation de change mode) permet de changer les permissions d'accès d'un fichier ou d'un répertoire.
  • chown (de l'anglais change the owner) permet de changer le propriétaire d'un fichier ou d'un dossier (nécessite les droits de l'utilisateur racine root)

On peut définir un chemin vers un fichier ou dossier de façon :

  • relative, en partant du dossier courant.
  • absolue, en partant du dossier racine /.
Répertoire Description
/ Racine du système de fichiers
~ Répertoire d'accueil (HOME)
. Répertoire courant
.. Répertoire parent

Le système de fichiers racine de GNU / Linux comprend au minimum huit dossiers.

  • /bin contient les programmes communs essentiels.
  • /home contient les dossiers personnels des utilisateurs.
  • /etc contient les fichiers de configuration de l'OS et de certains programmes.

Pour aller plus loin : Flux d’entrée / sortie et redirections, filtres et pipeline⚓︎

  • Par défaut, chaque programme (dont les commandes shell) exécuté dans un shell UNIX admet trois canaux, ou flux, de communication avec l’extérieur :

    • Un canal d’entrée nommé entrée standard (stdin en anglais) qui par défaut est le texte saisi au clavier dans le terminal.
    • Un canal de sortie nommé sortie standard (stdout en anglais) qui par défaut est l’écran du terminal.
    • Un canal d’erreur nommé erreur standard (stderror en anglais) qui par défaut est l’écran du terminal.
  • On peut modifier l’entrée ou la sortie standard d’une comamnde pour lire ou écrire sur d’autres canaux que ceux par défaut (fichiers ou flux réseaux au lieu de clavier / écran ). Pour rediriger un flux vers l’entrée ou la sortie standard d’une commande on utilise des opérateurs de redirection :

Opérateur Redirection
> sortie standard
>> sortie standard en ajout à la fin
< entrée standard

Exemples :⚓︎

  • si on veut écrire le contenu du répertoire courant dans un fichier contenu.txt, on redirige la sortie standard de ls vers un fichier contenu.txt au lieu de l’écran du terminal :
    user@nomordi:~$ ls > contenu.txt

  • Et si on veut compter le nombre de mots dans un texte, on redirige son entrée standard vers le contenu de texte.txt au lieu du clavier :
    user@nomordi:~$ wc -m < texte.txt

  • On peut enchaîner les commandes en pipeline : la sortie standard d’une commande est raccordée à l’entrée standard d’une commande suivante à l’aide d’un pip symbolisé par le caractère | :
    commande_debut | commande_fin

  • Si on veut intercaler une commande entre les deux, elle doit envoyer son entrée standard sur sa sortie standard : de telles commandes qui servent de traitements intermédiaires entre le début et la fin d’un pipeline sont appelées filtres. On peut ainsi réaliser en une ligne de commande des traitements complexes.
    commande_debut | filtre1 | filtre2 | ... | commande_fin

Le tableau ci-dessous donne quelques exemples de filtres, d’autres options sont disponibles pour chaque commande.

Commande Action
cat copie son entrée standard sur sa sortie standard sans modification
sort trie les lignes de son entrée standard par ordre alphabétique
sort -r trie les lignes de son entrée standard par ordre (alphabétique) décroissant
sort -n trie les lignes de son entrée standard par ordre numérique (et pas chaîne de caractères)
sort -k champs,champs trie en précisant ou les champs à prendre en compte pour le tri
-t sep permet de préciser le séparateur de champs
cut -d: -f 5 sélectionne le \(5^\text{e}\) champ de chaque ligne de l'entrée standard découpée selon le délimiteur :
wc -l compte les lignes de son entrée standard
wc -w compte les mots de son entrée standard
wc -m compte les caractères de son entrée standard
uniq supprime les lignes considérées comme des doublons
head -n5 affiche les cinq premières lignes de son entrée standard
head -n-5 affiche tout sauf les cinq dernières lignes de son entrée standard
tail -n5 affiche les cinq dernières lignes de son entrée standard
tail -n+5 affiche tout sauf les cinq premières lignes de son entrée standard

Exercice :⚓︎

(Exercice du manuel de première NSI de Thibault Balabonski chez Ellipses)
Le fichier /etc/passwd contient la liste des utilisateurs locaux de la machine. Pour chaque question, on recherchera éventuellement dans le manuel avec la commande man command les options pertinentes des commandes proposées.

  1. Afficher les 5 premières lignes du fichier /etc/passwd.
  2. Faire afficher le nombre de lignes du fichier /etc/passwd avec la commande wc.
  3. Trier le fichier /etc/passwd avec la commande sort. Quel ordre est utilisé ?
  4. Les champs de chaque ligne de /etc/passwd sont séparées par le caractère :. Trier le fichier selon le troisième champ. Quel ordre est utilisé ?
  5. Trier /etc/passwd selon le troisième champ avec l’ordre numérique.